In diesem Modul werden alle Transaktionen einer Kreditkarte gespeichert. Die Summe aller Transaktionen bildet den aktuellen Kontostand der Karte.

\subsubsection{Gespeicherte Daten}

\begin{itemize}
    \item Eingehende Transaktion:

    \begin{itemize}
        \item Kartennummer
        \item Verwendungszweck
        \item Betrag
        \item Kontonummer (Absender)
        \item BLZ (Absender)
        \item Inhaber (Absender)
        \item Zeitpunkt der Eintragung
        \item Signatur der \TV{}
        \item Signatur der \TSA{}
    \end{itemize}
    
    \item Ausgehende Transaktion:

    \begin{itemize}
        \item Kartennummer
        \item Verwendungszweck
        \item Betrag
        \item Kontonummer (Empfänger)
        \item BLZ (Empfänger)
        \item Inhaber (Empfänger)
        \item Zeitpunkt der Eintragung
        \item Signatur der Kreditkarte
        \item Signatur des \Term{}
        \item Signatur der \TV{}
        \item Signatur der \TSA{}
    \end{itemize}

    \item Terminal:

    \begin{itemize}
        \item IP-Adresse
        \item Public Key
        \item Zeitpunkt der letzen Änderung
        \item Geändert durch (Benutzername)
        \item Signatur der \TV{}
        \item Signatur der \TSA{}
    \end{itemize}

\end{itemize}

\subsubsection{Sicherheitsmaßnahmen}

\begin{enumerate}[resume*]
    \item \label{checkcard} Kreditkarten müssen vor Beginn einer Transaktion auf Gültigkeit geprüft werden. Dazu wird die Kartennummer aus dem Magnetstreifen ausgelesen, zur Signierung an den Chip der Karte gesendet und anschließend in der \TV{} \texttt{isValid} aufgerufen. Wenn diese Methode \texttt{FALSE} zurückgibt, muss der Vorgang abgebrochen werden.

    \item \label{checkpin} Kreditkartenbesitzer müssen vor Beginn einer Transaktion auf Zugehörigkeit zur Karte geprüft werden. Dazu müssen sie im \Term{} einen PIN eingeben, der vom Chip der Karte auf Gültigkeit geprüft wird. Falls der PIN ungültig ist, muss der Vorgang abgebrochen werden.

    \item \label{txsignatures} Ausgehende Transaktionen werden gemeinsam mit der Signatur der Kreditkarte, der Signatur des \Terms{}, der Signatur der \TV{} und der Signatur der \TSA{} gespeichert.
    
    \item \label{nodeletetx} Gespeicherte Transaktionen dürfen datenbankseitig nicht änderbar sein.
\end{enumerate}

\subsubsection{Angebotene Methoden}

\begin{itemize}
    \item \texttt{isValid}: Ruft \texttt{isValid} in der \KV{} auf, um das Ablaufdatum der Karte zu prüfen. Wenn diese Anfrage erfolgreich ist, wird \texttt{TRUE}, andernfalls \texttt{FALSE} zurückgegeben.

    \item \texttt{createTransaction}: Erstellt eine neue Transaktion. Die Transaktionsdaten müssen von der Kreditkarte und vom Terminal signiert sein. Die beiden Signaturen werden zunächst auf Gültigkeit überprüft. Dann wird eine Anfrage an \texttt{getCardLimit} in der \KV{} gesendet, um zu prüfen, ob der gewünschte Betrag abgebucht werden kann. Wenn die Transaktion erlaubt ist, wird diese verschlüsselt, zur Signatur an die \TSA{} gesendet, von der \TV{} signiert und in der Datenbank gespeichert.
   \item \texttt{getTransactions}: Liefert alle Transaktionen einer Karte zurück, als Parameter muss die Kreditkartennummer angegeben werden.
\end{itemize}

\subsubsection{Schnittstelle zum Karten-Terminal im Shop}

\begin{itemize}
    \item Jedes \Term{} enthält einen Private Key, der physisch gegen das Auslesen geschützt werden muss. Der Key wird für das Signieren der angeforderten Transaktionen sowie für die verschlüsselte Kommunikation mit der \TV{} verwendet.
    
    \item Alle Anfragen müssen sowohl vom \Term{} als auch von der Kreditkarte signiert sein. Sämtliche Signaturen werden vor Bearbeitung der Anfrage auf Korrektheit überprüft. Die IP-Adresse des Terminals wird verwendet, um den zu verwendenden Public Key zu eruieren. Weiters enthalten alle Anfragen die Kreditkartennummer als Parameter, der zum Nachschlagen des Public Keys der Kreditkarte verwendet wird.

    \item Anfragen werden nur von bekannten IP-Addressen akzeptiert.
    
    \item Jedes \Term{} besitzt den Public Key der \TV{}, welcher für die Verschlüsselung der Kommunikation verwendet wird.
\end{itemize}

\subsubsection{Schnittstelle zur Karten-Verwaltung}

\begin{itemize}
    \item Die Karten-Verwaltung hat lediglich Zugriff auf die Methode \texttt{getTransactions}.

\end{itemize}

\subsubsection{Schnittstelle zum Benachrichtigungs-System}

\begin{itemize}
    \item Anfragen vom Benachrichtigungssystem werden nicht akzeptiert.
\end{itemize}